import request from '@/config/axios'
import dayjs from 'dayjs'

// 定义LocalDateTime类型（后端返回的ISO格式字符串）
type LocalDateTime = string;

// 日期格式化工具函数
const formatDateTime = (dateTime: LocalDateTime): string => {
  if (!dateTime) return '';
  // 将ISO格式（如2023-09-08T12:34:56）转换为2023-09-08 12:34:56
  return dayjs(dateTime).format('YYYY-MM-DD HH:mm:ss');
};

// 聚集预警参与人员关联表 VO
export interface WarningGatherPersonVO {
  id: number // 主键
  gatherId: number // 聚集预警ID
  personId: number // 参与人员ID
}

// 聚集预警参与人员关联表 后端响应对象
export interface WarningGatherPersonRespVO {
  id: number // 主键
  gatherId: number // 聚集预警ID
  personId: number // 参与人员ID
  personName: string // 参与人员姓名
  idNumber: string // 证件号码
  createTime: LocalDateTime // 预警时间（ISO字符串格式）
  lng: number // 经度
  lat: number // 纬度
  address: string // 定位地址
  locationTime: string // 定位时间
  isRead: number
}

// 格式化后的响应对象类型（可选）
export interface FormattedWarningGatherPersonRespVO extends Omit<WarningGatherPersonRespVO, 'createTime' | 'locationTime'> {
  createTime: string // 格式化后的预警时间
  locationTime: string // 格式化后的定位时间
}

// 格式化响应数据的工具函数
export const formatWarningGatherPerson = (item: WarningGatherPersonRespVO): FormattedWarningGatherPersonRespVO => {
  return {
    ...item,
    createTime: formatDateTime(item.createTime),
    locationTime: formatDateTime(item.locationTime) // 假设locationTime也是ISO格式
  };
};

// 聚集预警参与人员关联表 API
export const WarningGatherPersonApi = {
  // 查询聚集预警参与人员关联表分页
  getWarningGatherPersonPage: async (params: any) => {
    const response = await request.get<{
      list: WarningGatherPersonRespVO[],
      total: number,
      page: number,
      size: number,
      pages: number
    }>({ url: `/member/warning-gather-person/page`, params });

    // 返回时自动格式化日期
    return {
      ...response,
      list: response.list.map(formatWarningGatherPerson)
    };
  },

  // 查询聚集预警参与人员关联表详情
  getWarningGatherPerson: async (id: number) => {
    const response = await request.get<WarningGatherPersonRespVO>({
      url: `/member/warning-gather-person/get?id=` + id
    });

    // 格式化日期后返回
    return formatWarningGatherPerson(response);
  },

  // 其他API方法保持不变...
  createWarningGatherPerson: async (data: WarningGatherPersonVO) => {
    return await request.post<number>({
      url: `/member/warning-gather-person/create`,
      data
    })
  },

  updateWarningGatherPerson: async (data: WarningGatherPersonVO) => {
    return await request.put<boolean>({
      url: `/member/warning-gather-person/update`,
      data
    })
  },

  deleteWarningGatherPerson: async (id: number) => {
    return await request.delete<boolean>({
      url: `/member/warning-gather-person/delete?id=` + id
    })
  },

  exportWarningGatherPerson: async (params: any) => {
    return await request.download<Blob>({
      url: `/member/warning-gather-person/export-excel`,
      params
    })
  },

  /**
   * 单条标记已读
   * @param id 聚集人员记录ID
   */
  markSingleRead: async (id: number) => {
    return await request.put<boolean>({
      url: `/member/warning-gather-person/mark-single-read`,
      params: { id } // 用params传参（或根据后端要求改为data）
    });
  },

  /**
   * 批量标记已读
   * @param ids 聚集人员记录ID列表
   */
  markBatchRead: async (ids: number[]) => {
    return await request.put<boolean>({
      url: `/member/warning-gather-person/mark-batch-read`,
      data: ids // 直接传递数组，而非包含ids属性的对象
    });
  }
}
